講完MLP的理論過後,我們來利用python來實作簡單的MLP,看看應該怎麼在python上實際應用。為了方便使用,我們選擇採用python中scikit-learn最著名的iris鳶尾花資料集進行預測。
一開始我們直接引入scikit-learn中的datasets,將鳶尾花的資料給讀出來。之後利用pandas套件將資料轉換成pandas中的dataframe資料型態,這樣可以更好的觀察我們的資料長什麼樣子。
from sklearn import datasets
import pandas as pd
iris = datasets.load_iris()
features = pd.DataFrame(data = iris.data, columns = iris.feature_names)
labels = pd.DataFrame(data = iris.target)
display(features)
display(labels)
以下兩張圖片便是利用pandas中的display函式來展示dataframe,可以看到我們的features有sepal length(cm)萼片長度、sepal width(cm)萼片寬度、petal length(cm)花瓣長度以及petal width(cm)花瓣寬度。
將資料分為features以及labels過後,利用scikit-learn中的train_test_split函式將訓練及以及測試及給分開,筆者此處所採用的比例為訓練集:測試集 = 2 : 1(程式碼中為test_size = 0.33))。
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(features, labels, test_size = 0.33, random_state = 42)
有了訓練集以及測試集過後,我們就可以利用scikit-learn來訓練我們的MLP模型啦!首先宣告一個MLPClassifier物件,但目前這只代表一個空的模型,我們還需要給他訓練集feature以及label,讓模型學習應該如何去做判斷。
from sklearn.neural_network import MLPClassifier
clf = MLPClassifier()
clf.fit(x_train, y_train)
訓練完模型過後,我們先定義一個函式accuracy,等等就可以直接用這個函式來看預測的準確度是多少。
def accuracy(predict, real):
n = 0
for i in range(len(predict)):
if (predict[i] == real[i]):
n += 1
return n / len(predict)
我們利用predict函式先得出對於x_test的預測結果,之後將結果跟正確答案y_test丟進剛剛定義的accuracy函式,就可以印出結果,筆者這邊所得出的結果為98%,可以得出結論scikit-learn的鳶尾花資料適合使用MLP模型來預測。
result = clf.predict(x_test)
print(f"Accuracy: {accuracy(result, y_test[0].values) * 100} %")
如果懶得自己定義函式來看正確率的話,scikit-learn其實也有提供函式來做計算正確率的功能。我們可以直接將預測結果和正確結果丟進accuracy_score函式中,就會得出正確率囉!
from sklearn.metrics import accuracy_score
result = clf.predict(x_test)
print(f"Accuract: {accuracy_score(result, y_test) * 100} %")